package a26_Collection.Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;

/**
 * @Author quan
 * @Description Collection的通用遍历方式：3种
 * @Date 2023/3/14 14:48
 */
public class Traversal {
    public static void main(String[] args) {
        //创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");

       /**注意：1、迭代器遍历
        * (1)遍历完成后指针不会复位
        * (2)遍历完成后还获取当前元素，会报NoSuchElementException
        * (3)代码中只能使用一次it.next()方法
        * (4)迭代器遍历的时候，不能用集合的方式进行删除或者增加,可以用迭代器的方式删除
       */
//        //(1)创建一个迭代器对象it，默认指向集合的0索引处
//        Iterator<String> it = coll.iterator();
//        //(2)判断当前位置是否有元素：有的话获取当前元素值并移动指针指向下一个位置
//        while (it.hasNext()){
//            String str = it.next();
//            if(str.equals("aaa")){
////                coll.remove("ccc");//不能用集合的方式coll删除元素
//                it.remove();//可以用迭代器it的方式删除元素
//            }
//        }
//        System.out.println(coll);

        /**2、增强for循环:只有单列集合(List)和数组才能使用
         * s就是一个第三方变量，在循环过程中依次表示集合中的每一个数据
         */
//        for (String s : coll) {
//            s="qq";
//            System.out.println(s);//s只是一个第三方变量，因此修改值并不改变集合coll中的值
//        }
//        System.out.println(coll);
        /** 3、Lambda表达式
         * 利用匿名内部类的形式。底层原理：其实自己也会遍历集合，依次得到每个元素
         * 把得到的每一个元素，传递给下面的accept方法，s依次表示集合中的每一个元素
          */
//        coll.forEach(new Consumer<String>() { //匿名内部类：Consumer是一个接口
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        coll.forEach((String s) -> {
                System.out.println(s);
         }
        );
    }
}
